package model.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import model.bean.FilmeJB;
import model.bean.GeneroJB;

public class MidiaDAO {

	private String db;
	private String login;
	private String password;
	private String url;

	public MidiaDAO() throws ClassNotFoundException {

		// Carrega a classe do driver JDBC
		Class.forName("com.mysql.jdbc.Driver");

		// Configura��es de acesso ao banco
		db = "boxmovie";
		login = "root";
		password = "";
		//password = "vertrigo";
		url = "jdbc:mysql://localhost:3306/";

	}

	public Connection getConnection() throws Exception {

		return DriverManager.getConnection(url + db, login, password);
	}

	


	public int total() throws Exception {
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			st = conn.createStatement();

			String cont = "SELECT count(*) AS total FROM `filmes`";
			rs = st.executeQuery(cont);

			int total = 0;
			while (rs.next()) {
				total = rs.getInt("total");
			}

			return total;
		}

		finally {
			try {
				conn.close();
				conn = null;
				st = null;
			} catch (SQLException e) {
				e.printStackTrace();

			}
		}
	}
	
	
	public ArrayList<FilmeJB> listaDestaque() throws Exception {
		ArrayList<FilmeJB> listaDestaque = new ArrayList<FilmeJB>();
		FilmeJB filme = null;
		GeneroJB genero = null;
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			st = conn.createStatement();

			String sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme ORDER BY RAND() LIMIT 0, 2;";
			rs = st.executeQuery(sql);
			listaDestaque.clear();

			while (rs.next()) {
				filme = new FilmeJB();
				genero = new GeneroJB();
				filme.setId(rs.getInt("id_filme"));
				filme.setSinopse(rs.getString("sinopse_filme"));
				filme.setCapa(rs.getString("capa_filme"));
				filme.setTrailer(rs.getString("trailer_filme"));
				filme.setTitulo(rs.getString("nome_filme"));
				filme.setDtLancFilme(rs.getDate("data_lanc_filme"));
				genero.setId(rs.getInt("genero_filme"));
				genero.setNome(rs.getString("nome_genero"));
				filme.setGenero(genero);

				listaDestaque.add(filme);
			}

			return listaDestaque;
		}

		finally {
			try {
				conn.close();
				conn = null;
				st = null;
			} catch (SQLException e) {
				e.printStackTrace();

			}
		}
	}
	
	


	public ArrayList<FilmeJB> lista(String order, int inicio, int qtd) throws Exception {
		ArrayList<FilmeJB> listaDestaque = new ArrayList<FilmeJB>();
		FilmeJB filme = null;
		GeneroJB genero = null;
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			st = conn.createStatement();
			String sql = "";
			
			String ordem = "ASC";
			if (order.equalsIgnoreCase("qtd_locacao") || order.equalsIgnoreCase("data_lanc_filme")){
				ordem = "DESC";
			}

			if (order.equalsIgnoreCase("Policial")){
				sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme AND genero_filme = '7' ORDER BY '" + order + "' " + ordem + " LIMIT "+ inicio + ", " + qtd + ";";
			}else if (order.equalsIgnoreCase("Romance")){
				sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme AND genero_filme = '6' ORDER BY '" + order + "' " + ordem + " LIMIT "+ inicio + ", " + qtd + ";";
			}else if (order.equalsIgnoreCase("Comedia")){
				sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme AND genero_filme = '5' ORDER BY '" + order + "' " + ordem + " LIMIT "+ inicio + ", " + qtd + ";";
			}else if (order.equalsIgnoreCase("Terror")){
				sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme AND genero_filme = '4' ORDER BY '" + order + "' " + ordem + " LIMIT "+ inicio + ", " + qtd + ";";
			}else if (order.equalsIgnoreCase("Ficcao")){
				sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme AND genero_filme = '3' ORDER BY '" + order + "' " + ordem + " LIMIT "+ inicio + ", " + qtd + ";";
			}else if (order.equalsIgnoreCase("Drama")){
				sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme AND genero_filme = '2' ORDER BY '" + order + "' " + ordem + " LIMIT "+ inicio + ", " + qtd + ";";
			}else if (order.equalsIgnoreCase("Acao")){
				sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme AND genero_filme = '1' ORDER BY '" + order + "' " + ordem + " LIMIT "+ inicio + ", " + qtd + ";";
			}			
			else{
			sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme ORDER BY filmes." + order + " " + ordem + " LIMIT "+ inicio + ", " + qtd + ";";
			}
			
			rs = st.executeQuery(sql);
//			listaDestaque.clear();
//			listaDestaque.removeAll(listaDestaque);

			listaDestaque = new ArrayList<FilmeJB>();
			
			while (rs.next()) {
				filme = new FilmeJB();
				genero = new GeneroJB();
				filme.setId(rs.getInt("id_filme"));
				filme.setSinopse(rs.getString("sinopse_filme"));
				filme.setCapa(rs.getString("capa_filme"));
				filme.setTrailer(rs.getString("trailer_filme"));
				filme.setTitulo(rs.getString("nome_filme"));
				filme.setDtLancFilme(rs.getDate("data_lanc_filme"));
				genero.setId(rs.getInt("genero_filme"));
				genero.setNome(rs.getString("nome_genero"));
				filme.setGenero(genero);

				listaDestaque.add(filme);
			}

			return listaDestaque;
		}

		finally {
			try {
				conn.close();
				conn = null;
				st = null;
			} catch (SQLException e) {
				e.printStackTrace();

			}
		}
	}
	
	


	public ArrayList<FilmeJB> listaNome(String nome, int inicio, int qtd) throws Exception {
		ArrayList<FilmeJB> listaDestaque = new ArrayList<FilmeJB>();
		FilmeJB filme = null;
		GeneroJB genero = null;
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			st = conn.createStatement();
			String sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme AND nome_filme LIKE '%"+nome+"%' ORDER BY 'nome_filme' LIMIT "+ inicio + ", " + qtd + ";";
		
			
			rs = st.executeQuery(sql);
			listaDestaque.clear();

			while (rs.next()) {
				filme = new FilmeJB();
				genero = new GeneroJB();
				filme.setId(rs.getInt("id_filme"));
				filme.setSinopse(rs.getString("sinopse_filme"));
				filme.setCapa(rs.getString("capa_filme"));
				filme.setTrailer(rs.getString("trailer_filme"));
				filme.setTitulo(rs.getString("nome_filme"));
				filme.setDtLancFilme(rs.getDate("data_lanc_filme"));
				genero.setId(rs.getInt("genero_filme"));
				genero.setNome(rs.getString("nome_genero"));
				filme.setGenero(genero);

				listaDestaque.add(filme);
			}

			return listaDestaque;
		}

		finally {
			try {
				conn.close();
				conn = null;
				st = null;
			} catch (SQLException e) {
				e.printStackTrace();

			}
		}
	}
	
	

	public FilmeJB filmeId(int id) throws Exception {
		FilmeJB filme = null;
		GeneroJB genero = null;
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			st = conn.createStatement();

			String sql = "SELECT * FROM filmes, genero WHERE id_genero = genero_filme AND id_filme =  " + id + ";";
			rs = st.executeQuery(sql);

			while (rs.next()) {
				filme = new FilmeJB();
				genero = new GeneroJB();
				filme.setId(rs.getInt("id_filme"));
				filme.setSinopse(rs.getString("sinopse_filme"));
				filme.setCapa(rs.getString("capa_filme"));
				filme.setTrailer(rs.getString("trailer_filme"));
				filme.setTitulo(rs.getString("nome_filme"));
				filme.setDtLancFilme(rs.getDate("data_lanc_filme"));
				genero.setId(rs.getInt("genero_filme"));
				genero.setNome(rs.getString("nome_genero"));
				filme.setGenero(genero);
			}
			return filme;
		}

		finally {
			try {
				conn.close();
				conn = null;
				st = null;
			} catch (SQLException e) {
				e.printStackTrace();

			}
		}
	}

}
